package com.zeratul.common.i18n.config.prop;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

/**
 * 国际化相关配置类
 */
@Slf4j
@Data
@Configuration
@ConfigurationProperties("i18n.config")
@RefreshScope
public class I18nProperties {

    /**
     * 是否开启国际化功能
     */
    private boolean enabled = true;

    /**
     * 国际化 - 语言请求头名称
     */
    private String headerName = "Accept-Language";

    /**
     * 默认语言环境
     */
    private String defaultLanguage = "zh_CN";

    /**
     * 配置模式：local和nacos
     */
    private Mode mode = Mode.NACOS;

    /**
     * 基于本地的配置
     */
    private Local local = new Local();

    /**
     * 基于Nacos的配置
     */
    private Nacos nacos = new Nacos();

    /**
     * 本地配置类
     */
    @Data
    public static class Local {
        /**
         * 本地配置文件加载名称
         */
        private String loadName = "classpath:message";

        /**
         * 字符集
         */
        private String encoding = "UTF-8";
    }

    /**
     * nacos的配置类
     */
    @Data
    public static class Nacos {

        /**
         * nacos加载基础组名称，默认会加载
         */
        private String baseGroupName = "base";

        /**
         * nacos加载基础配置文件名称，默认为message
         */
        private String baseDataId = "message";

        /**
         * nacos加载组名称，默认为当前服务名称
         */
        private String groupName;

        /**
         * 编码
         */
        private String encoding = "UTF-8";

        /**
         * 国际化配置模式，支持两种：json和properties
         */
        private Format format = Format.JSON;
    }

    /**
     * 配置模式枚举
     */
    @Getter
    public enum Mode {
        /**
         * 基于本地配置
         */
        LOCAL,

        /**
         * 基于Nacos配置中心
         */
        NACOS;
    }

    /**
     * 国际化Nacos配置格式枚举，支持两种：json和properties
     */
    @Getter
    @AllArgsConstructor
    public enum Format {
        /**
         * json格式
         */
        JSON("json"),

        /**
         * properties格式
         */
        PROPERTIES("properties");

        /**
         * 格式名称
         */
        private String name;
    }

}
